/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package br.siagefi.controller;

import br.siagefi.enuns.OrigemDocumento;
import br.siagefi.enuns.Periodicidade;
import br.siagefi.enuns.TipoCusto;
import br.siagefi.model.Documento;
import br.siagefi.model.Lancamento;
import br.siagefi.service.DocumentoService;
import java.io.Serializable;
import java.util.Arrays;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;


/**
 *
 * @author Paulo Lavarini
 */
@SessionScoped
@ManagedBean(name = "documentoBean")
public class DocumentoBean implements Serializable {
    
    private Documento documento;
    private Lancamento lancamento;
    private final DocumentoService service;
    private List<Documento> documentos;
    private boolean exibeMsgListaVazia;

    public DocumentoBean() {
        this.documento = new Documento();
        this.lancamento = new Lancamento();
        this.service = new DocumentoService();
        this.carregarLista();
        this.exibeMsgListaVazia = false;
    }
    
     public final void carregarLista(){
         this.documentos = service.listar();
    }
    
    public String gravar(){
        System.out.println("GRAVANDO NO BANCO");
        service.gravar(this.getDocumento());
        this.limparFormularioDoJsf();
        this.carregarLista();
        return "documento";
    }
    
    public String alterar(Documento documento){
        this.setDocumento(documento);
        if (documento.getLancamentos().isEmpty())
            this.setExibeMsgListaVazia(true);
        return "inserirDocumento";
    }
    
    public String editarLancamento(Lancamento lancamento){
        this.setLancamento(lancamento);
        return "alterarLancamento";
    }
    
    public String alterarLancamento(){
        int indice = this.getDocumento().getLancamentos().indexOf(this.getLancamento());
        this.getDocumento().getLancamentos().set(indice, lancamento);
        return "inserirDocumento";
    }
    
     public String remover(){
        service.remover(this.getDocumento());
        this.limparFormularioDoJsf();
        this.carregarLista();
        return "documento";
    }
     
    public String remover(Documento documento){
        service.remover(documento);
        this.limparFormularioDoJsf();
        this.carregarLista();
        return "documento";
    }
    
    public String limpar(){
        this.limparFormularioDoJsf();
        return "documento";
    }
    
    public String voltarIncluirDocumento(){
        return "inserirDocumento";
    }
  
    public String inserirLancamentos(){
        service.gravar(this.getDocumento());
        Documento doc = this.getDocumento();
        service.removerLancamentos(doc);
        service.adicionarLancamento(doc);
        this.setDocumento(doc);
        setExibeMsgListaVazia(false);
        return "inserirDocumento";
    }
    
    public void limparFormularioDoJsf(){
        this.documento = new Documento();
        this.setExibeMsgListaVazia(false);
    }

    public Documento getDocumento() {
        return documento;
    }

    public void setDocumento(Documento documento) {
        this.documento = documento;
    }

    public Lancamento getLancamento() {
        return lancamento;
    }

    public void setLancamento(Lancamento lancamento) {
        this.lancamento = lancamento;
    }

    public List<Documento> getDocumentos() {
        return documentos;
    }

    public void setDocumentos(List<Documento> documentos) {
        this.documentos = documentos;
    }

    public List<OrigemDocumento> getListaOrigens() {
        return Arrays.asList(OrigemDocumento.values());
    }

    public List<TipoCusto> getListaTipoCusto() {
        return Arrays.asList(TipoCusto.values());
    }

    public List<Periodicidade> getListaPeriodicidade() {
        return Arrays.asList(Periodicidade.values());
    }

    public boolean isExibeMsgListaVazia() {
        return exibeMsgListaVazia;
    }

    public void setExibeMsgListaVazia(boolean exibeMsgListaVazia) {
        this.exibeMsgListaVazia = exibeMsgListaVazia;
    }
    
    
    
}
